package com.webframe.dao;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;


public interface IJdbcDao
{
	/**
	 * @function:单表插入功能，
	 * @param tableName 待插入表明
	 * @param object 待插入字段和内容，Map中的KEY为字段名，value为该字段所对应的值
	 * @throws Exception
	 */
	public void doInsertExecute(String tableName, Map<String, Object> object) throws Exception;

	/**
	 * @function:通过表名、主键字段名、主键值删除表格的内容
	 * @param tableName 待删除内容的表名
	 * @param fkColumnName 待删除内容表的主键字段名
	 * @param id 待删除记录的主键值，格式为 以逗号(,)分割的字符串，如 1abc2321,2asdafsd3
	 */
	public void doDeleteExecuteByID(String tableName, String pkColumnName, String ids);

	/**
	 * @function:同doDeleteExecuteByID(String tableName ,String fkColumnName,String ids)，但默认主键字段名为 ID_
	 * @param tableName
	 * @param id
	 */
	public void doDeleteExecuteByID(String tableName, String ids);

	/**
	 * @function: 通过表名、主键值（主键名为默认的 ID_） 查询单条记录，并以 <字段名,字段值>的形式存放在Map对象中，如果没有结果则返回空Map，而不是null
	 * @param id
	 * @param tableName
	 * @return
	 */
	public Map<String, Object> doQueryById(String id, String tableName);

	/**
	 * @function:通过表名、字段名和字段值，返回查询结果
	 * @param tableName
	 * @param fieldName
	 * @param fieldValue
	 * @return 没有查询结果时，返回空List ，而不是null
	 */
	public List<Map<String, Object>> doQueryByField(String tableName, String fieldName, String fieldValue);

	/**
	 * @function:根据SQL语句查询结果
	 * @param sql
	 * @return 没有结果时，返回空List ，而不是null
	 */
	public List<Map<String, Object>> doQueryBySql(String sql);

	/**
	 * @function:根据SQL语句查询结果
	 * @param sql
	 * @param params
	 * @return 没有结果时，返回空List ，而不是null
	 */
	public List<Map<String, Object>> doQueryBySql(String sql, Object... params);
	
	/**
	 * @function:通过SQL语句更新数据库
	 * @param sql
	 */
	public void doUpdateBySql(String sql);

	/**
	 * @function:通过SQL语句删除数据库记录
	 * @param sql
	 */
	public void doDeleteBySql(String sql);

	/**
	 * @function:通过表名、主键名和主键值更新数据库记录，待跟新的字段名和值以<String,Object>的形式存储于object中
	 * @param tableName
	 * @param pkColumnName
	 * @param id
	 * @param object
	 * @throws SQLException
	 */
	public void doUpdateExecuteByID(String tableName, String pkColumnName, String id, Map<String, Object> object)
				throws SQLException;

	/**
	 * @function: 根据SQL语句批量根据数据库记录
	 * @param sqls
	 * @throws Exception
	 */
	public void doBatchInsert(String[] sqls) throws Exception;

	/**
	 * 将数据集批量插入或者更新数据库，如果主键字段为null或者空格，则插入数据，否则更新数据
	 * 
	 * @function:
	 * @param tableName 表名
	 * @param objects 单条记录以Map<String,Object>的形成存在，多条记录以List<Map<String, Object>>的形式存在
	 * @param pkColumnName 主键名
	 * @throws Exception
	 */
	public void doBatchInsertOrUpdate(String tableName, List<Map<String, Object>> objects, String pkColumnName)
				throws Exception;

	/**
	 * @function: 单表插入或修改，数据源存储在object中，其key为BerheleyConstant.Constant_DataSource_
	 * @param tableName 表名
	 * @param object 待插入或修改表的字段及对应值，以Map<String, Object>的形成
	 * @param pkColumnName 待插入表的主键字段名，
	 * @throws Exception
	 */
	public void doInsertOrUpdate(String tableName, Map<String, Object> object, String pkColumnName) throws Exception;

	/**
	 * @function: 单表插入或修改， 表名 (必须) 存储在object中，其key为Constant_TableName_， 数据源(非必须)
	 *            默认为dataSource,如果需要指定特定数据源可在object中加入key:BerheleyConstant.Constant_DataSource_，
	 *            主键名(非必须), 默认值为ID_,如果需要指定特殊主键名,可以在object中加入Key:Constant_PKColumnName_
	 * @param object
	 * @throws Exception
	 */
	public void doInsertOrUpdate(Map<String, Object> object) throws Exception;
	
}
